package dao;

import model.User;

import java.util.List;

public interface UsersManagement {

    /**
     * 注册用户，返回用户id（主键）
     * @param u 用户
     * @return 用户id
     */
    UsersManager.UserDAOOptionResult register(User u);

    /**
     * 删除用户
     * @param u 用户
     * @return 被删除的用户id
     */
    Long delete(User u);

    /**
     * 修改用户
     * @param before 要修改的用户
     * @param after 修改的结果
     * @return 用户id
     */
    Long alter(User before, User after, Boolean increase);
    Long alter(User before, User after);

    /**
     * 查询用户
     * @param u 包含用户信息的User对象，null字段不计入查询条件
     * @return 用户id
     */
    List<User> query(User u, int pageSize, int page);
    List<User> query(User u);

    /**
     * 查询用户的消息
     * @param u
     * @param unreadOnly 仅查询未读的消息
     * @return 包含消息的结果集
     */
    List<Object[]> queryMessages(User u, boolean unreadOnly);
}
